package org.thunms.framework.dao;

import java.io.Serializable;
import java.util.List;
/**
 *说明: 数据访问层接口，主要目地使用hibernate做增删改查，其他辅助的实现查询 .
 * @author wanglp 2012-6-6 下午4:30:10
 * @param <T>
 */

public interface Dao<T>  {

	/**
	 * 
	 *说明: 删除指定的持久化实例 .
	 *<P></p> 
	 * @author wanglp 2012-4-20 下午5:36:33
	 * @param arg0
	 * @
	 */

	public void delete(T entity);

	public List<T> query(String queryString);

	public List<T> query(String queryString, Object value);
	
	public List<T> query(String queryString, Object... values);

	public T get(Serializable id);
	

	public void save(T entity);

	public void saveOrUpdate(T entity);

	
	public void update(T entity);

	
	
	//------------20120816add
	/**
	 * 分页查询.
	 * @param hql 查询语句.
	 * @param page 当前需要的数据是第几页.
	 * @param rows 当前需要返回的数据的条数.
	 * @param param 查询参数.
	 * @return
	 */
	public List<T> query(String hql, Integer page, Integer rows, List<Object> param);
	/**
	 * 分页查询.
	 * @param hql 查询语句.
	 * @param page 当前需要的数据是第几页.
	 * @param rows 当前需要返回的数据的条数.
	 * @param param 查询参数.
	 * @return
	 */
	public List<T> query(String hql, Integer page, Integer rows, Object... param);
	/**
	 * 数据条数统计
	 * @param hql 查询语句.
	 * @param param 查询参数.
	 * @return
	 */
	public Long count(String hql, Object... param);
	
	/**
	 * 数据条数统计
	 * @param hql 查询语句.
	 * @param param 查询参数.
	 * @return
	 */
	public Long count(String hql, List<Object> param);
	
	
	
	

}
